/*
 * MapOpt.h
 *
 *  Created on: 21/01/2012
 *      Author: marcio
 */

#ifndef MAPOPT_H_
#define MAPOPT_H_

typedef struct{
	void* keys;
	void* key_values;
	void* values;
	void* values_keys;
	int size;
	int last;
	int (*compkey)(void*, void*);
	int (*compvalue)(void*, void*);
	int (*orderkey)(void*, void*);
	int (*ordervalue)(void*, void*);
}MapOpt;

Map* mapopt_newMap(int size, int (*fk)(void*, void*), int (*fi)(void*, void*), int (*ok)(void*, void*), int (*ov)(void*, void*) );

int mapopt_add(Map* m, void* key, void* value);

int mapopt_addAll(Map* m, void** key, void** value, int size);

void* mapopt_getValue(Map* m, void* key);

void* mapopt_getKey(Map* m, void* value);

int mapopt_getAll(Map* m, void** key, void** value);

int mapopt_seachForKey(Map* m, void* key);

int mapopt_searchForValue(Map* m, void* value);

int mapopt_isEmpty(Map* m);

int mapopt_isFull(Map* m);

#endif /* MAPOPT_H_ */
